﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Financial_Assistant
{
    /// <summary>
    /// Логика взаимодействия для ProgramWindow.xaml
    /// </summary>
    public partial class ProgramWindow : Window
    {
        private string _connectionString =
                @"Data Source = CHRISTINABEIM\SQLEXPRESS; Initial Catalog=Financial_Assistant; Trusted_Connection=True;"; //( ip-сервера, имя БД, разрешение соединения)
        private string UserID = String.Empty;

        //Коллекции для привязки данных к дата-гриду
        public ObservableCollection<CountCollect> CountCollection { get; private set; } // коллекция для привязки списка счетов к датаГриду
        public ObservableCollection<ConsumeCollect> ConsumeCollection { get; private set; } // коллекция для привязки списка расходов к датаГриду
        public ObservableCollection<ProfitCollect> ProfitCollection { get; private set; } // коллекция для привязки списка доходов к датаГриду
        public ObservableCollection<DebtorCollect> DebtCollection { get; private set; } // коллекция для привязки списка долгов к датаГриду
        public ObservableCollection<CreditorCollect> CreditorCollection { get; private set; } // коллекция для привязки списка кредитов к датаГриду
        public ObservableCollection<PlanConsumeCollect> PlanConsumeCollection { get; private set; } // коллекция для привязки списка планов расходов к датаГриду
        public ObservableCollection<PlanProfitCollect> PlanProfitCollection { get; private set; } // коллекция для привязки списка планов доходов к датаГриду

        public ProgramWindow(string userID)
        {
            InitializeComponent();
            UserID = userID;

            //Создаем и привязываем коллекции к дата гридам
            CountCollection = new ObservableCollection<CountCollect>();
            CountDataGrid.CanUserAddRows = false;
            CountDataGrid.CanUserDeleteRows = false;
            CountDataGrid.IsReadOnly = true;
            CountDataGrid.ItemsSource = CountCollection; // задаем источник данных для грида

            ConsumeCollection = new ObservableCollection<ConsumeCollect>();
            ConsumeDataGrid.CanUserAddRows = false;
            ConsumeDataGrid.CanUserDeleteRows = false;
            ConsumeDataGrid.IsReadOnly = true;
            ConsumeDataGrid.ItemsSource = ConsumeCollection; // задаем источник данных для грида

            ProfitCollection = new ObservableCollection<ProfitCollect>();
            ProfitDataGrid.CanUserAddRows = false;
            ProfitDataGrid.CanUserDeleteRows = false;
            ProfitDataGrid.IsReadOnly = true;
            ProfitDataGrid.ItemsSource = ProfitCollection; // задаем источник данных для грида

            DebtCollection = new ObservableCollection<DebtorCollect>();
            DebtorDataGrid.CanUserAddRows = false;
            DebtorDataGrid.CanUserDeleteRows = false;
            DebtorDataGrid.IsReadOnly = true;
            DebtorDataGrid.ItemsSource = DebtCollection; // задаем источник данных для грида

            CreditorCollection = new ObservableCollection<CreditorCollect>();
            CreditorDataGrid.CanUserAddRows = false;
            CreditorDataGrid.CanUserDeleteRows = false;
            CreditorDataGrid.IsReadOnly = true;
            CreditorDataGrid.ItemsSource = CreditorCollection; // задаем источник данных для грида

            PlanConsumeCollection = new ObservableCollection<PlanConsumeCollect>();
            PlanConsumeDataGrid.CanUserAddRows = false;
            PlanConsumeDataGrid.CanUserDeleteRows = false;
            PlanConsumeDataGrid.IsReadOnly = true;
            PlanConsumeDataGrid.ItemsSource = PlanConsumeCollection; // задаем источник данных для грида

            PlanProfitCollection = new ObservableCollection<PlanProfitCollect>();
            PlanProfitDataGrid.CanUserAddRows = false;
            PlanProfitDataGrid.CanUserDeleteRows = false;
            PlanProfitDataGrid.IsReadOnly = true;
            PlanProfitDataGrid.ItemsSource = PlanProfitCollection; // задаем источник данных для грида
            //при загрузке сразу же загружаем все данные в гриды

            countTabItemGotFocus(); // по умолчанию открывается вкладка счетов
            consumptionTabItemGotFocus();
            profitTabItemGotFocus();

            //загрузка содержимого подвкладок
            debtorTabItemGotFocus();
            creditorTabItemGotFocus();
            plansConsumeTabItemGotFocus();
            planProfitTabItemGotFocus();
        }

        //ВЫЙТИ ИЗ ПРОГРАММЫ
        private void ExitBut_Click(object sender, RoutedEventArgs e)
        {
            string question = "Вы действительно хотите выйти?";
            MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (resultBox == MessageBoxResult.Yes)
            {
                //Может нужно как то вручную отчистить все занимаемые ресурсы? или это произойдет автоматически?
                this.Close();
            }
        }

        //ВЕРНУТЬСЯ В ГЛАВНОЕ ОКНО
        private void NameBut_Click(object sender, RoutedEventArgs e)
        {
            string question = "Вы действительно хотите закончить работу?";
            MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

            if (resultBox == MessageBoxResult.Yes)
            {
                MainWindow newWin = new MainWindow();
                newWin.Show();
                this.Close();
            }
        }

        //ВКЛАДКА КАЛЬКУЛЯТОР
        private void CalcBut_Click(object sender, RoutedEventArgs e)
        {
            //но идет привязка к операционной системе!! просто писать свой калькулятор не хочу
            System.Diagnostics.Process externalProg = new System.Diagnostics.Process();
            externalProg.StartInfo.FileName = "calc.exe";
            externalProg.Start();
        }

        //ВКЛАДКА СЧЕТА
        private void AddCountBut_Click(object sender, RoutedEventArgs e)
        {
            CountCard countWin = new CountCard(UserID, String.Empty, String.Empty, String.Empty, true);
            //true - добавление счета
            countWin.ShowDialog();
            countTabItemGotFocus(); // обновляем грид
        }
        private void ChangeCountBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.CountDataGrid.SelectedItem != null)
            {
                CountCard countWin = new CountCard(UserID, CountCollection[CountDataGrid.SelectedIndex].CountName,
                                                           CountCollection[CountDataGrid.SelectedIndex].CountID,
                                                            CountCollection[CountDataGrid.SelectedIndex].StartBalance, false);
                //false - изменение счета
                countWin.ShowDialog();
                countTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }
        private void DeleteCountBut_Click(object sender, RoutedEventArgs e)
        {
            countTabItemGotFocus();
        }

        //ВКЛАДКА КАТЕГОРИЙ
        private void CategoryBut_Click(object sender, RoutedEventArgs e)
        {
            CategoryWindow categoryWin = new CategoryWindow(UserID);
            categoryWin.ShowDialog();   
        }

        //ВКЛАДКА РАСХОДЫ И ДОХОДЫ - аналогичны, поэтому кнопки рядом по действию
        private void AddConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            ConsumeProfitWindow myWind = new ConsumeProfitWindow(MyBoolAction.Consume, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, true); // true - так как добавление
            myWind.ShowDialog();
            consumptionTabItemGotFocus();// обновляем грид
        }
        private void AddProfitBut_Click(object sender, RoutedEventArgs e)
        {
            ConsumeProfitWindow myWind = new ConsumeProfitWindow(MyBoolAction.Profit, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, true); // true - так как добавление
            myWind.ShowDialog();
            profitTabItemGotFocus();// обновляем грид
        }

        private void ChangeConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.ConsumeDataGrid.SelectedItem != null)
            {
                ConsumeProfitWindow myWind = new ConsumeProfitWindow
                    (MyBoolAction.Consume, UserID, ConsumeCollection[ConsumeDataGrid.SelectedIndex].ActionID,
                    ConsumeCollection[ConsumeDataGrid.SelectedIndex].Date,
                    ConsumeCollection[ConsumeDataGrid.SelectedIndex].Category,
                    ConsumeCollection[ConsumeDataGrid.SelectedIndex].CountName,
                    ConsumeCollection[ConsumeDataGrid.SelectedIndex].SumOFConsume,
                    ConsumeCollection[ConsumeDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение

                myWind.ShowDialog();
                consumptionTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }
        private void ChangeProfitBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.ProfitDataGrid.SelectedItem != null)
            {
                ConsumeProfitWindow myWind = new ConsumeProfitWindow
                    (MyBoolAction.Profit, UserID, ProfitCollection[ProfitDataGrid.SelectedIndex].ActionID,
                    ProfitCollection[ProfitDataGrid.SelectedIndex].Date,
                    ProfitCollection[ProfitDataGrid.SelectedIndex].Category,
                    ProfitCollection[ProfitDataGrid.SelectedIndex].CountName,
                    ProfitCollection[ProfitDataGrid.SelectedIndex].SumOFProfit,
                    ProfitCollection[ProfitDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение
                myWind.ShowDialog();
                profitTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }

        private void DeleteProfitBut_Click(object sender, RoutedEventArgs e)
        {
            //НАСТРОЕНО КАСКАДНОЕ УДАЛЕНИЕ!!!!
            //Находим выбранную категорию и запрашиваем подтверждение удаления
            if (this.ProfitDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE [Расходы и доходы] FROM [Расходы и доходы] where  [ID действия] = '");
                        query.Append(ProfitCollection[ProfitDataGrid.SelectedIndex].ActionID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        ProfitCollection.Remove(ProfitCollection[ProfitDataGrid.SelectedIndex]);
                        ProfitDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }
        private void DeleteConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            //НАСТРОЕНО КАСКАДНОЕ УДАЛЕНИЕ!!!!
            //Находим выбранную категорию и запрашиваем подтверждение удаления
            if (this.ConsumeDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE [Расходы и доходы] FROM [Расходы и доходы] where  [ID действия] = '");
                        query.Append(ConsumeCollection[ConsumeDataGrid.SelectedIndex].ActionID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        ConsumeCollection.Remove(ConsumeCollection[ConsumeDataGrid.SelectedIndex]);
                        ConsumeDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }

        //ВКЛАДКА ДОЛГИ И КРЕДИТЫ - аналогичны, поэтому кнопки рядом по действию
        private void AddDebtorBut_Click(object sender, RoutedEventArgs e)
        {
            DebtCreditCard myWind = new DebtCreditCard(MyBoolAction.Debtor, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, false, String.Empty, true); // true - так как добавление
            myWind.ShowDialog();
            debtorTabItemGotFocus();// обновляем грид
        }
        private void AddCreditorBut_Click(object sender, RoutedEventArgs e)
        {
            DebtCreditCard myWind = new DebtCreditCard(MyBoolAction.Creditor, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, false, String.Empty, true); // true - так как добавление
            myWind.ShowDialog();
            creditorTabItemGotFocus();// обновляем грид
        }

        private void ChangeDebtorBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.DebtorDataGrid.SelectedItem != null)
            {
                DebtCreditCard myWind = new DebtCreditCard
                    (MyBoolAction.Debtor, UserID, DebtCollection[DebtorDataGrid.SelectedIndex].ActionID,
                    DebtCollection[DebtorDataGrid.SelectedIndex].StartDate,
                    DebtCollection[DebtorDataGrid.SelectedIndex].Person,
                    DebtCollection[DebtorDataGrid.SelectedIndex].CountName,
                    DebtCollection[DebtorDataGrid.SelectedIndex].SumOFDebt,
                    DebtCollection[DebtorDataGrid.SelectedIndex].Percent,
                    DebtCollection[DebtorDataGrid.SelectedIndex].Period,
                    DebtCollection[DebtorDataGrid.SelectedIndex].RecoverySum,
                    DebtCollection[DebtorDataGrid.SelectedIndex].State,
                    DebtCollection[DebtorDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение

                myWind.ShowDialog();
                debtorTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }
        private void ChangeCreditorBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.CreditorDataGrid.SelectedItem != null)
            {
                DebtCreditCard myWind = new DebtCreditCard
                    (MyBoolAction.Debtor, UserID, CreditorCollection[CreditorDataGrid.SelectedIndex].ActionID,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].StartDate,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].Person,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].CountName,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].SumOFCredit,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].Percent,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].Period,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].RecoverySum,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].State,
                    CreditorCollection[CreditorDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение

                myWind.ShowDialog();
                creditorTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }

        private void DeleteDebtorBut_Click(object sender, RoutedEventArgs e)
        {
            //НАСТРОЕНО КАСКАДНОЕ УДАЛЕНИЕ!!!!
            //Находим выбранную категорию и запрашиваем подтверждение удаления
            if (this.DebtorDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE [Кредиты и долги] FROM [Кредиты и долги] where  [ID операции] = '");
                        query.Append(DebtCollection[DebtorDataGrid.SelectedIndex].ActionID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        DebtCollection.Remove(DebtCollection[DebtorDataGrid.SelectedIndex]);
                        DebtorDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }
        private void DeleteCreditorBut_Click(object sender, RoutedEventArgs e)
        {
            //НАСТРОЕНО КАСКАДНОЕ УДАЛЕНИЕ!!!!
            //Находим выбранную категорию и запрашиваем подтверждение удаления
            if (this.CreditorDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE [Кредиты и долги] FROM [Кредиты и долги] where  [ID операции] = '");
                        query.Append(CreditorCollection[CreditorDataGrid.SelectedIndex].ActionID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        CreditorCollection.Remove(CreditorCollection[CreditorDataGrid.SelectedIndex]);
                        CreditorDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }

        //ВКЛАДКА ПЛАНИРОВАНИЕ - аналогичны, поэтому кнопки рядом по действию
        private void AddPlanProfitBut_Click(object sender, RoutedEventArgs e)
        {
            PlanCardWindow myWindow = new PlanCardWindow(MyBoolAction.Profit, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, true);
            myWindow.ShowDialog();
            planProfitTabItemGotFocus();// обновляем грид
        }
        private void AddPlanConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            PlanCardWindow myWindow = new PlanCardWindow(MyBoolAction.Consume, UserID, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, String.Empty, true);
            myWindow.ShowDialog();
            plansConsumeTabItemGotFocus();// обновляем грид
        }

        private void ChangePlanProfitBut_Click(object sender, RoutedEventArgs e)
        {

            if (this.PlanProfitDataGrid.SelectedItem != null)
            {
                PlanCardWindow myWind = new PlanCardWindow
                    (MyBoolAction.Debtor, UserID,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].PlanID,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].StartDate,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].CountName,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].SumOFPlan,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].Category,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].Periodicity,
                    PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение

                myWind.ShowDialog();
                planProfitTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }
        private void ChangePlanConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            if (this.PlanConsumeDataGrid.SelectedItem != null)
            {
                PlanCardWindow myWind = new PlanCardWindow
                    (MyBoolAction.Debtor, UserID,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].PlanID,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].StartDate,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].CountName,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].SumOFPlan,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].Category,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].Periodicity,
                    PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].Definition,
                    false); // false - так как изменение

                myWind.ShowDialog();
                plansConsumeTabItemGotFocus(); // обновляем грид
            }
            else
            {
                MessageBox.Show("Выберите данные для изменения");
            }
        }

        private void DeletePlanConsumeBut_Click(object sender, RoutedEventArgs e)
        {
            //Находим выбранную строчку и запрашиваем подтверждение удаления
            if (this.PlanConsumeDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE Планирование FROM Планирование where  [ID плана] = '");
                        query.Append(PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex].PlanID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        PlanConsumeCollection.Remove(PlanConsumeCollection[PlanConsumeDataGrid.SelectedIndex]);
                        PlanConsumeDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }
        private void DeletePlanProfitBut_Click(object sender, RoutedEventArgs e)
        {
            //Находим выбранную строчку и запрашиваем подтверждение удаления
            if (this.PlanProfitDataGrid.SelectedItem != null)
            {
                //запросить подтверждение удаления
                string question = "Вы действительно хотите удалить данную запись?";
                MessageBoxResult resultBox = MessageBox.Show(question, "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Question);

                if (resultBox == MessageBoxResult.Yes)
                {
                    //пользователь подтведил удаление
                    try
                    {
                        SqlConnection connection = new SqlConnection(_connectionString);
                        StringBuilder query = new StringBuilder();

                        query.Append("DELETE Планирование FROM Планирование where  [ID плана] = '");
                        query.Append(PlanProfitCollection[PlanProfitDataGrid.SelectedIndex].PlanID + "'");

                        connection.Open(); // открыть считывание
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        SqlDataReader reader = command.ExecuteReader();
                        connection.Close();
                        reader.Dispose();
                        command.Dispose();
                        MessageBox.Show("Запись удалена");

                        //обновляем грид, но не вызовом заново считывания из базы и переписывания коллекции, а так:
                        PlanProfitCollection.Remove(PlanProfitCollection[PlanProfitDataGrid.SelectedIndex]);
                        PlanProfitDataGrid.Items.Refresh();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + ex.Message);
                    }
                }
            }
            else
            {
                MessageBox.Show("Выберите данные для удаления");
            }
        }

        //ЗАГРУЗКА ДАНННЫХ В ГРИДЫ
        //При изменении вкладки добавляем все данные в коллекцию
        private void countTabItemGotFocus()
        {
            CountCollection.Clear();//очищаем коллекцию счетов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [ID счета],Наименование, [Нач. балланс] FROM Счета ");
                query.Append("where [ID пользователя] = '");
                query.Append(UserID + "'");

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    CountCollect data = new CountCollect();
                    data.CountID = reader[0].ToString();
                    data.CountName = reader[1].ToString();
                    data.StartBalance = reader[2].ToString();
                    CountCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        private void consumptionTabItemGotFocus()
        {
            ConsumeCollection.Clear();//очищаем коллекцию расходов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [Расходы и доходы].[ID действия] FROM [Расходы и доходы] INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета]");
                query.Append(" and Сумма<0 and Счета.[ID пользователя] = '" + UserID + "' and [ID категории] IS NULL");

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();

                List<string> listNullCategory = new List<string>();

                while (reader.Read())
                {
                    listNullCategory.Add(reader[0].ToString());
                }
                reader.Close();
                command.Dispose();

                //у нас есть расходы  с категориями и без. Сначала обработаем те, что с категориями:
                query.Clear();
                query.Append("SELECT Дата, Счета.Наименование, [Используемые категории].Наименование, Сумма, [Расходы и доходы].Примечание, [ID действия] FROM [Расходы и доходы] ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета] and Сумма<0 and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append(" INNER JOIN [Используемые категории] on [Используемые категории].[ID используемой категории] = [Расходы и доходы].[ID категории]");
                query.Append(" and [Используемые категории].Вид = 'false'");

                command = new SqlCommand(query.ToString(), connection);
                reader = command.ExecuteReader();

                while (reader.Read())
                {
                    ConsumeCollect data = new ConsumeCollect();

                    string tempDate = String.Empty; // для записи даты
                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[0].ToString(); // формат дд.мм.гггг 0:00:00
                    data.Date = tempDate.Remove(11);

                    data.CountName = reader[1].ToString();
                    data.Category = reader[2].ToString();

                    double sum = Convert.ToDouble(reader[3].ToString());
                    if (sum<0) sum *= -1;
                    data.SumOFConsume = sum.ToString();
                    //нужно записать в коллекцию положительное число, изменим знак.

                    data.Definition = reader[4].ToString();
                    data.ActionID = reader[5].ToString();

                    ConsumeCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                if (listNullCategory.Count != 0)
                {
                    //далее нужно добавить в расходы те записи по ID, которые без категории
                    query.Clear();
                    query.Append("SELECT Дата, Счета.Наименование, 'Без категории', Сумма, [Расходы и доходы].Примечание, [ID действия] FROM [Расходы и доходы] ");
                    query.Append("INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета] and Сумма<0 and Счета.[ID пользователя] = '");
                    query.Append(UserID + "'");
                    query.Append(" and ([ID действия] = '");

                    bool order = true;
                    foreach (String str in listNullCategory)
                    {
                        if (order)
                        {
                            query.Append(str + "'");
                            order = false;
                        }
                        else query.Append(" OR [ID действия] ='" + str + "'");
                    }
                    query.Append(")");

                    command = new SqlCommand(query.ToString(), connection);
                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        ConsumeCollect data = new ConsumeCollect();
                        string tempDate = String.Empty; // для записи даты

                        //считываем дату и записываем ее в правильном порядке в строку:
                        tempDate = reader[0].ToString(); // формат дд.мм.гггг 0:00:00
                        data.Date = tempDate.Remove(11);

                        data.CountName = reader[1].ToString();
                        data.Category = reader[2].ToString();
                        data.SumOFConsume = reader[3].ToString();
                        data.Definition = reader[4].ToString();
                        data.ActionID = reader[5].ToString();

                        ConsumeCollection.Add(data);
                    }
                    reader.Close();
                    command.Dispose();
                }
                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        private void profitTabItemGotFocus()
        {
            ProfitCollection.Clear();//очищаем коллекцию доходов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [Расходы и доходы].[ID действия] FROM [Расходы и доходы] INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета]");
                query.Append(" and Сумма>0 and Счета.[ID пользователя] = '" + UserID + "' and [ID категории] IS NULL");

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();

                List<string> listNullCategory = new List<string>();

                while (reader.Read())
                {
                    listNullCategory.Add(reader[0].ToString());
                }
                reader.Close();
                command.Dispose();

                //у нас есть доходы с категориями и без. Сначала обработаем те, что с категориями:
                query.Clear();
                query.Append("SELECT Дата, Счета.Наименование, [Используемые категории].Наименование, Сумма, [Расходы и доходы].Примечание, [ID действия] FROM [Расходы и доходы] ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета] and Сумма>0 and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append(" INNER JOIN [Используемые категории] on [Используемые категории].[ID используемой категории] = [Расходы и доходы].[ID категории]");
                query.Append(" and [Используемые категории].Вид = 'true'");

                command = new SqlCommand(query.ToString(), connection);
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    ProfitCollect data = new ProfitCollect();
                    string tempDate = String.Empty; // для записи даты

                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[0].ToString(); // формат дд.мм.гггг 0:00:00
                    data.Date = tempDate.Remove(11);

                    data.CountName = reader[1].ToString();
                    data.Category = reader[2].ToString();
                    data.SumOFProfit = reader[3].ToString();
                    data.Definition = reader[4].ToString();
                    data.ActionID = reader[5].ToString();

                    ProfitCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                if (listNullCategory.Count != 0)
                {
                    //далее нужно добавить в доходы те записи по ID, которые без категории
                    query.Clear();
                    query.Append("SELECT Дата, Счета.Наименование, 'Без категории', Сумма, [Расходы и доходы].Примечание, [ID действия] FROM [Расходы и доходы] ");
                    query.Append("INNER JOIN Счета on Счета.[ID счета] = [Расходы и доходы].[ID счета] and Сумма>0 and Счета.[ID пользователя] = '");
                    query.Append(UserID + "'");
                    query.Append(" and ([ID действия] = '");

                    bool order = true;
                    foreach (String str in listNullCategory)
                    {
                        if (order)
                        {
                            query.Append(str + "'");
                            order = false;
                        }
                        else query.Append(" OR [ID действия] ='" + str + "'");
                    }
                    query.Append(")");

                    command = new SqlCommand(query.ToString(), connection);
                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        ProfitCollect data = new ProfitCollect();
                        string tempDate = String.Empty; // для записи даты

                        //считываем дату и записываем ее в правильном порядке в строку:
                        tempDate = reader[0].ToString(); // формат дд.мм.гггг 0:00:00
                        data.Date = tempDate.Remove(11);

                        data.CountName = reader[1].ToString();
                        data.Category = reader[2].ToString();
                        data.SumOFProfit = reader[3].ToString();
                        data.Definition = reader[4].ToString();
                        data.ActionID = reader[5].ToString();

                        ProfitCollection.Add(data);
                    }
                    reader.Close();
                    command.Dispose();
                }
                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        //изменение данных подвкладок
        private void debtorTabItemGotFocus()
        {
            DebtCollection.Clear();//очищаем коллекцию долгов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [ID операции], Персоны.Имя, Сумма, [Начальная дата], [Период кредитования], [Процентная ставка], [Статус], Примечание, ");
                query.Append("Счета.Наименование, Возвращено FROM [Кредиты и долги] ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = [Кредиты и долги].[ID счета] ");
                query.Append("and Тип = 'True' and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append("INNER JOIN Персоны on Персоны.[ID персоны] = [Кредиты и долги].[ID персоны]");

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    DebtorCollect data = new DebtorCollect();
                    data.ActionID = reader[0].ToString();
                    data.Person = reader[1].ToString();

                    double sum = Convert.ToDouble(reader[2].ToString());
                    data.SumOFDebt = sum.ToString();
                    
                    string tempDate = String.Empty; // для записи даты
                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                    data.StartDate = tempDate.Remove(11);

                    data.Period = reader[4].ToString();
                    data.Percent = reader[5].ToString();
                    data.State = Convert.ToBoolean(reader[6].ToString());
                    data.Definition = reader[7].ToString();
                    data.CountName = reader[8].ToString();
                    data.RecoverySum = reader[9].ToString();

                    DebtCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        private void creditorTabItemGotFocus()
        {
            CreditorCollection.Clear();//очищаем коллекцию долгов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [ID операции], Персоны.Имя, Сумма, [Начальная дата], [Период кредитования], [Процентная ставка], [Статус], Примечание, ");
                query.Append("Счета.Наименование, Возвращено FROM [Кредиты и долги] ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = [Кредиты и долги].[ID счета] ");
                query.Append("and Тип = 'False' and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append("INNER JOIN Персоны on Персоны.[ID персоны] = [Кредиты и долги].[ID персоны]");

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    CreditorCollect data = new CreditorCollect();
                    data.ActionID = reader[0].ToString();
                    data.Person = reader[1].ToString();
                    data.SumOFCredit = reader[2].ToString();

                    string tempDate = String.Empty; // для записи даты
                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                    data.StartDate = tempDate.Remove(11);

                    data.Period = reader[4].ToString();
                    data.Percent = reader[5].ToString();
                    data.State = Convert.ToBoolean(reader[6].ToString());
                    data.Definition = reader[7].ToString();
                    data.CountName = reader[8].ToString();

                    double recSum = Convert.ToDouble(reader[9].ToString());
                    data.RecoverySum = recSum.ToString();

                    CreditorCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        private void plansConsumeTabItemGotFocus()
        {
            PlanConsumeCollection.Clear();//очищаем коллекцию долгов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [ID плана] FROM Планирование INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета]");
                query.Append(" and Сумма<0 and Счета.[ID пользователя] = '" + UserID + "' and [ID категории] IS NULL"); //сумма меньше нуля - расход, иначе доход

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                query.Clear();
                SqlDataReader reader = command.ExecuteReader();

                List<string> listNullCategory = new List<string>();

                while (reader.Read())
                {
                    listNullCategory.Add(reader[0].ToString());
                }
                reader.Close();
                command.Dispose();

                //у нас есть планы расходов с категориями и без. Сначала обработаем те, что с категориями:
                query.Append("SELECT [ID плана], [Используемые категории].Наименование, Сумма, [Дата начала], Периодичность, Счета.Наименование,  Планирование.Примечание FROM Планирование ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета] and Сумма<0 and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append(" INNER JOIN [Используемые категории] on [Используемые категории].[ID используемой категории] = Планирование.[ID категории]");
                query.Append(" and [Используемые категории].Вид = 'false'");

                command = new SqlCommand(query.ToString(), connection);
                query.Clear();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    PlanConsumeCollect data = new PlanConsumeCollect();
                    string tempDate = String.Empty; // для записи даты

                    data.PlanID = reader[0].ToString();
                    data.Category = reader[1].ToString();

                    //нужно записать в коллекцию положительное число суммы плана, изменим знак.
                    double sum = Convert.ToDouble(reader[2].ToString());
                    if (sum < 0) sum *= -1;
                    data.SumOFPlan = sum.ToString();
                    
                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                    data.StartDate = tempDate.Remove(11);

                    data.Periodicity = reader[4].ToString();
                    data.CountName = reader[5].ToString();
                    data.Definition = reader[6].ToString();

                    PlanConsumeCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                if (listNullCategory.Count != 0)
                {
                    //далее нужно добавить в планы расходов те записи по ID, которые без категории
                    query.Append("SELECT [ID плана], 'Без категории', Сумма, [Дата начала], Периодичность, Счета.Наименование,  Планирование.Примечание FROM Планирование ");
                    query.Append("INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета] and Сумма<0 and Счета.[ID пользователя] = '");
                    query.Append(UserID + "'");
                    query.Append(" and ([ID плана] = '");

                    bool order = true;
                    foreach (String str in listNullCategory)
                    {
                        if (order)
                        {
                            query.Append(str + "'");
                            order = false;
                        }
                        else query.Append(" OR [ID действия] ='" + str + "'");
                    }
                    query.Append(")");

                    command = new SqlCommand(query.ToString(), connection);
                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        PlanConsumeCollect data = new PlanConsumeCollect();
                        string tempDate = String.Empty; // для записи даты

                        data.PlanID = reader[0].ToString();
                        data.Category = reader[1].ToString();

                        //нужно записать в коллекцию положительное число суммы плана, изменим знак.
                        double sum = Convert.ToDouble(reader[2].ToString());
                        if (sum < 0) sum *= -1;
                        data.SumOFPlan = sum.ToString();

                        //считываем дату и записываем ее в правильном порядке в строку:
                        tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                        data.StartDate = tempDate.Remove(11);

                        data.Periodicity = reader[4].ToString();
                        data.CountName = reader[5].ToString();
                        data.Definition = reader[6].ToString();

                        PlanConsumeCollection.Add(data);
                    }
                    reader.Close();
                    command.Dispose();
                }
                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
        private void planProfitTabItemGotFocus()
        {
            PlanProfitCollection.Clear();//очищаем коллекцию долгов

            try
            {
                SqlConnection connection = new SqlConnection(_connectionString);
                StringBuilder query = new StringBuilder();
                connection.Open(); // открыть считывание

                query.Append("SELECT [ID плана] FROM Планирование INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета]");
                query.Append(" and Сумма>0 and Счета.[ID пользователя] = '" + UserID + "' and [ID категории] IS NULL"); //сумма меньше нуля - расход, иначе доход

                SqlCommand command = new SqlCommand(query.ToString(), connection);
                query.Clear();
                SqlDataReader reader = command.ExecuteReader();

                List<string> listNullCategory = new List<string>();

                while (reader.Read())
                {
                    listNullCategory.Add(reader[0].ToString());
                }
                reader.Close();
                command.Dispose();

                //у нас есть планы расходов с категориями и без. Сначала обработаем те, что с категориями:
                query.Append("SELECT [ID плана], [Используемые категории].Наименование, Сумма, [Дата начала], Периодичность, Счета.Наименование,  Планирование.Примечание FROM Планирование ");
                query.Append("INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета] and Сумма>0 and Счета.[ID пользователя] = '");
                query.Append(UserID + "'");
                query.Append(" INNER JOIN [Используемые категории] on [Используемые категории].[ID используемой категории] = Планирование.[ID категории]");
                query.Append(" and [Используемые категории].Вид = 'true'");

                command = new SqlCommand(query.ToString(), connection);
                query.Clear();
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    PlanProfitCollect data = new PlanProfitCollect();
                    string tempDate = String.Empty; // для записи даты

                    data.PlanID = reader[0].ToString();
                    data.Category = reader[1].ToString();
                    data.SumOFPlan = reader[2].ToString();

                    //считываем дату и записываем ее в правильном порядке в строку:
                    tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                    data.StartDate = tempDate.Remove(11);

                    data.Periodicity = reader[4].ToString();
                    data.CountName = reader[5].ToString();
                    data.Definition = reader[6].ToString();

                    PlanProfitCollection.Add(data);
                }
                reader.Close();
                command.Dispose();

                if (listNullCategory.Count != 0)
                {
                    //далее нужно добавить в планы расходов те записи по ID, которые без категории
                    query.Append("SELECT [ID плана], 'Без категории', Сумма, [Дата начала], Периодичность, Счета.Наименование,  Планирование.Примечание FROM Планирование ");
                    query.Append("INNER JOIN Счета on Счета.[ID счета] = Планирование.[ID счета] and Сумма>0 and Счета.[ID пользователя] = '");
                    query.Append(UserID + "'");
                    query.Append(" and ([ID плана] = '");

                    bool order = true;
                    foreach (String str in listNullCategory)
                    {
                        if (order)
                        {
                            query.Append(str + "'");
                            order = false;
                        }
                        else query.Append(" OR [ID действия] ='" + str + "'");
                    }
                    query.Append(")");

                    command = new SqlCommand(query.ToString(), connection);
                    reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        PlanProfitCollect data = new PlanProfitCollect();
                        string tempDate = String.Empty; // для записи даты

                        data.PlanID = reader[0].ToString();
                        data.Category = reader[1].ToString();
                        data.SumOFPlan = reader[2].ToString();

                        //считываем дату и записываем ее в правильном порядке в строку:
                        tempDate = reader[3].ToString(); // формат дд.мм.гггг 0:00:00
                        data.StartDate = tempDate.Remove(11);

                        data.Periodicity = reader[4].ToString();
                        data.CountName = reader[5].ToString();
                        data.Definition = reader[6].ToString();

                        PlanProfitCollection.Add(data);
                    }
                    reader.Close();
                    command.Dispose();
                }
                connection.Dispose();
            }
            catch (Exception em)
            {
                MessageBox.Show(this, "Ошибка чтения из базы данных" + Environment.NewLine + em.Message);
            }
        }
    }

    //Классы для коллекций
    public class CountCollect
    {
        public string CountID { get; set; }
        public string CountName { get; set; }
        public string StartBalance { get; set; }
        public string Consume { get; set; }
        public string Profit { get; set; }
        public string ResultSum { get; set; }
    }
    public class ConsumeCollect
    {
        public string ActionID { get; set; }
        public string SumOFConsume { get; set; }
        public string Date { get; set; }
        public string Category { get; set; }
        public string Definition { get; set; }
        public string CountName { get; set; }
    }
    public class ProfitCollect
    {
        public string ActionID { get; set; }
        public string SumOFProfit { get; set; }
        public string Date { get; set; }
        public string Category { get; set; }
        public string Definition { get; set; }
        public string CountName { get; set; }
    }
    public class DebtorCollect
    {
        public string ActionID { get; set; } // ID операции
        public string Person { get; set; } // Персона
        public string SumOFDebt { get; set; } // сумма долга
        public string StartDate { get; set; } // дата взятия долга
        public string Period { get; set; } // период кредитования
        public string Percent { get; set; } //процентная ставка
        public bool State { get; set; } //состояние, статус - показывает погашен ли долг
        public string Definition { get; set; } // примечание
        public string CountName { get; set; } // Счет
        public string RecoverySum { get; set; } // сумма, которая уже возвращена

        //остаток, который еще не вернули не считывается с базы, а вычисляется
        public string Ostatok
        {
            get 
            { 
                double a = Convert.ToDouble(SumOFDebt);
                double b = Convert.ToDouble(RecoverySum);
                return (a - b).ToString();
            }
        }
    }
    public class CreditorCollect
    {
        public string ActionID { get; set; } // ID операции
        public string Person { get; set; } // Персона
        public string SumOFCredit { get; set; } // сумма кредита
        public string StartDate { get; set; } // дата взятия долга
        public string Period { get; set; } // период кредитования
        public string Percent { get; set; } //процентная ставка
        public bool State { get; set; } //состояние, статус - показывает погашен ли долг
        public string Definition { get; set; } // примечание
        public string CountName { get; set; } // Счет
        public string RecoverySum { get; set; } // сумма, которая уже возвращена

        //остаток, который еще не вернули не считывается с базы, а вычисляется
        public string Ostatok
        {
            get
            {
                double a = Convert.ToDouble(SumOFCredit);
                double b = Convert.ToDouble(RecoverySum);
                return (a - b).ToString();
            }
        }
    }
    public class PlanConsumeCollect
    {
        public string PlanID { get; set; } // ID плана
        public string Category { get; set; } // Категория
        public string SumOFPlan { get; set; } // сумма запланированного расхода
        public string StartDate { get; set; } // дата начала плана
        public string Periodicity { get; set; } // периодичность снятия запланированного расхода
        public string Definition { get; set; } // примечание
        public string CountName { get; set; } // Счет
    }
    public class PlanProfitCollect
    {
        public string PlanID { get; set; } // ID плана
        public string Category { get; set; } // Категория
        public string SumOFPlan { get; set; } // сумма запланированного расхода
        public string StartDate { get; set; } // дата начала плана
        public string Periodicity { get; set; } // периодичность снятия запланированного расхода
        public string Definition { get; set; } // примечание
        public string CountName { get; set; } // Счет
    }

    //Перечисление для удобства расход или доход. Должник или кредитор
    public enum MyBoolAction
    {
        Consume, Profit, Debtor, Creditor
    }
}
